package com.rock.upms.api.upms.service;

import java.util.List;
import com.rock.common.base.BaseResult;
import com.rock.upms.model.UpmsDepartment;
import com.rock.upms.model.UpmsPermission;
import com.rock.upms.model.UpmsRole;
import com.rock.upms.model.UpmsRolePermission;
import com.rock.upms.model.UpmsThirdBind;
import com.rock.upms.model.UpmsUser;
import com.rock.upms.model.UpmsUserPermission;
import com.rock.upms.model.dto.RockMenu;
import com.rock.upms.model.dto.ThirdComLoginDto;
import com.rock.upms.model.dto.UserInfo;

/**
 * 功能：OuUserRoleDao接口 说明： Created by zhousq on 2017/11/7. 变更日志：
 * 
 */
public interface IUpmsService {

	void initMapper();

	// 根据用户id获取所拥有的权限(角色对应的权限，和加减权限的总集合)
	List<UpmsPermission> getPermissionByUserId(Integer ouUserId);

	// 根据用户id获取所属的角色
	List<UpmsRole> getRoleByUserId(Integer ouUserId);

	// 根据当前机构主键获取所有子机构（递归）
	List<UpmsDepartment> getChildDepartment(int id);

	// 获取根机构对象
	UpmsDepartment getRootDepartment();

	List<UpmsDepartment> getDepartmentByUsercode(String usercode);

	/**
	 * 功能：获取登录账号的默认账户信息（默认所在部门） 说明：若张三兼职了多个部门，则登录时直接登录到默认部门，登录后再切换，
	 * 用户可以更改默认部门，每个用户必须有一个默认部门
	 * 
	 * @param usercode
	 * @return UpmsUser
	 */
	UpmsUser getDefaultUser(String usercode);

	/**
	 * 功能：获取登录账号的默部門信息 说明：若张三兼职了多个部门，则登录时直接登录到默认部门，登录后再切换，
	 * 用户可以更改默认部门，每个用户必须有一个默认部门
	 * 
	 * @param usercode
	 * @return UpmsUser
	 */
	UpmsDepartment getDefaultDepartment(String usercode);

	/**
	 * 根据角色id获取所拥有的权限
	 * 
	 * @param upmsRoleId
	 * @return
	 */
	List<UpmsRolePermission> getRolePermisstionByRoleId(Integer roleId);

	/**
	 * 根据用户id获取所拥有的权限
	 * 
	 * @param upmsUserId
	 * @return
	 */
	List<UpmsUserPermission> getUserPermissionByUserId(Integer userId);

	/**
	 * 第三方绑定服务<br>
	 * 校验规则，以微信企业号为例<br>
	 * 1、third_code||openid 唯一
	 * 
	 * @param upmsThirdBind
	 * @return
	 */
	BaseResult thirdBind(UpmsThirdBind upmsThirdBind);

	/**
	 * 根据UpmsUser数据库实体对象获取userinfo
	 * 
	 * @param upmsUser
	 * @return
	 */
	UserInfo getUserInfoByUpmsUser(UpmsUser upmsUser);
}